メインコンテンツへスキップ
  1. ブログ投稿/

Python - シーケンス

·2 分

この投稿は、Pythonで値が連続しているデータタイプであるシーケンス(sequence types)について説明するために作成されました。

シーケンスとは? #

シーケンス型(sequence types)とは、値が連続しているデータタイプを指します。 シーケンス型の最大の特徴は、共通の動作と機能を提供する点です。

リスト [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
タプル (1, 2, 3, 4, 5) (1, 2, 3, 4, 5)
range range(5) 0, 1, 2, 3, 4
文字列 ‘Hello’ H e l l o

このように、シーケンスにはリスト、タプル、range、文字列があり、(bytes, bytearray)もこれに該当します。

シーケンスで作成されたオブジェクトをシーケンスオブジェクトと呼び、各々の値を要素(element)と言います。

シーケンスオブジェクト内の特定の値の確認 #

シーケンスオブジェクト内に特定の値があるか確認するためには、以下のようにinまたはnot inを使用できます。

>>> a = "Hello"
>>> "H" in a
True
>>> "A" in a
False
# not in 特定の値がないか確認
>>> "ell" not in a
False
>>> "Python" not in a
True

in 演算子を使用した場合、特定の値があれば True、なければ Falseが返され、逆に not in 演算子を使用した場合、特定の値がなければ True、あれば Falseが返されます。

シーケンスオブジェクトの連結 #

シーケンスオブジェクトは + 演算子を使用して連結できます。

>>> a = [0, 1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b 
[0, 1, 2, 3, 4, 5, 6]

ただし、 range는 + 演算子でオブジェクトを連結できません。

>>> range(0, 5) + range(5, 10)
TypeError Traceback (most recent call last)
<ipython-input-7-88e74efcb3c0> in <cell line: 1>()
----> 1 range(0, 5) + range(5, 10)
TypeError: unsupported operand type(s) for +: 'range' and 'range'

したがって、rangeをタプルやリストに変換して連結することが可能です。

>>> tuple(range(0, 5)) + tuple(range(5, 10))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> list(range(0, 5)) + list(range(5, 10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

シーケンスオブジェクトの繰り返し #

シーケンスオブジェクトは*演算子を使用して繰り返すことができます。 整数 * シーケンスオブジェクトまたはシーケンス * 整数で繰り返し可能です。

>>> [0, 1, 2, 3] * 3
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]

しかし、シーケンスオブジェクトの連結方法と同様に、rangesは * 演算子を使用して繰り返すことはできません。

>>> range(0,10) * 3
TypeError Traceback (most recent call last)
<ipython-input-11-824dcf3cff8f> in <cell line: 1>()
----> 1 range(0,10) * 3
TypeError: unsupported operand type(s) for *: 'range' and 'int'

したがって、タプルやリストに変換して繰り返しは可能です。

シーケンスオブジェクトの要素数の確認 #

シーケンスオブジェクトの要素数は len 関数を使用して確認できます。

# リスト
>>> a = [1, 2, 3, 4, 5]
>>> len(a)
5
# タプル
>>> b = (6, 7, 8, 9, 10)
>>> len(b)
5
# range
len(range(0, 5, 2)) # -> 0から5まで2ずつ増やして 0, 2, 4 
3
# 文字列
>>> c = "Hello, World"
>>> len(c)
12